/**
 * 
 */
package com.yidu.controller;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.yidu.domain.vo.ModuleVo;
import com.yidu.domain.vo.RoleModuleVo;
import com.yidu.domain.vo.RoleVo;
import com.yidu.service.ModuleService;
import com.yidu.service.ModuleServiceInter;
import com.yidu.service.RoleModuleService;
import com.yidu.service.RoleService;
import com.yidu.service.RoleServiceImpl;
import com.yidu.utils.Node;
import com.yidu.utils.NodeRole;
import com.yidu.utils.Pages;
import com.yidu.utils.State;

/**
 * @描述 模板控制器层
 * @author 梁海长
 * @date 2019年9月26日上午9:16:03
 */
@Controller
@RequestMapping("Module")
public class ModuleController {
	Logger log = Logger.getLogger(getClass());
	@Resource
	private ModuleServiceInter moduleServiceInter;
	@Resource
	private RoleModuleService roleModuleService;
	@RequestMapping("findAll")
	@ResponseBody
	public Map<String,Object> findAll(ModuleVo vo,Pages pages,String page){
		pages.setCurPage(Integer.valueOf(page));
		Map<String,Object> map = new HashMap<String, Object>();
		//后台接收总条数
		pages.setTotalRows(moduleServiceInter.Count(vo).intValue());
		//后台接收数据与页面
		List<ModuleVo> list = moduleServiceInter.findAllPage(vo, pages);
		
		map.put("code",0 );
		map.put("count",pages.getTotalRows());
		map.put("msg", "");
		map.put("data", list);
		return map;
	}
	/**
	 * 删除数据
	 * @param vo
	 * @return
	 */
	@RequestMapping("delete")
	@ResponseBody
	public State delete(ModuleVo vo) {
		moduleServiceInter.delete(vo.getModuleId());
		State state = new State();
		state.setState(1);
		state.setMsg("删除成功");
		return state;
	}
	/**
	 * 删除全部
	 * @param moduleId
	 * @return
	 */
	@RequestMapping("deleteAll")
	@ResponseBody
	public State deleteAll(String moduleId) {
		moduleServiceInter.deleteAll(moduleId);
		State state = new State();
		state.setState(1);
		state.setMsg("删除成功");
		return state;
	}
	/**
	 * 修改数据
	 * @param vo
	 * @return
	 */
	@RequestMapping("update")
	@ResponseBody
	public State update(ModuleVo vo) {
		moduleServiceInter.update(vo);
		State state = new State();
		state.setState(1);
		state.setMsg("修改成功");
		return state;
	}
	/**
	 * 根据id查询数据
	 * @param moduleId
	 * @return
	 */
	@RequestMapping("findId")
	@ResponseBody
	public ModuleVo findById(String moduleId) {
		return moduleServiceInter.findById(moduleId);
	}
	/*
	 * 查询所有模板，下拉树
	 */
	@RequestMapping("findByAll")
	@ResponseBody
	public List<Node> findByAll(){
		List<ModuleVo> list = moduleServiceInter.findAll();
		List<Node> listNode = new ArrayList<Node>();
		for (Iterator iterator = list.iterator(); iterator.hasNext();) {
			ModuleVo moduleVo = (ModuleVo) iterator.next();
			if(moduleVo.getModuleValidity().equals("有效")) {
				//新建一个node工具类对象
				Node node = new Node();
				//给工具类的id赋值
				node.setId(moduleVo.getModuleId());
				//给工具类的外键赋值
				node.setPid(moduleVo.getModModuleId());
				//给工具类的名称赋值
				node.setName(moduleVo.getModuleName());
				//最后将其加入到集合中
				listNode.add(node);
			}
		}
		//新建一个node工具类对象
		Node node = new Node();
		//新建一个集合对象，将上一个集合加入到本集合中
		List<Node> nodeList2 = node.createTree(listNode);
		return nodeList2;
		
	}
	/**
	 * 增加数据
	 * @param moduleVo
	 * @return
	 */
	@RequestMapping("insert")
	@ResponseBody
	public State insert(ModuleVo moduleVo) {
		if(moduleVo.getModuleId()!=null && !moduleVo.getModuleId().equals("")) {
			moduleServiceInter.update(moduleVo);
		}else {
			moduleServiceInter.add(moduleVo);
		}
		State state = new State();
		state.setState(1);
		state.setMsg("操作成功");
		
		return state;
		
	}
	/*
	 * 查询所有模板，树形组件
	 */
	@RequestMapping("findByAllTwo")
	@ResponseBody
	public List<NodeRole> findByAllTwo(){
		List<ModuleVo> list = moduleServiceInter.findAll();
		List<NodeRole> listNode = new ArrayList<NodeRole>();
		for (Iterator iterator = list.iterator(); iterator.hasNext();) {
			ModuleVo moduleVo = (ModuleVo) iterator.next();
			if(moduleVo.getModuleValidity().equals("有效")) {
				//新建一个node工具类对象
				NodeRole node = new NodeRole();
				//给工具类的id赋值
				node.setId(moduleVo.getModuleId());
				//给工具类的外键赋值
				node.setPid(moduleVo.getModModuleId());
				//给工具类的名称赋值
				node.setTitle(moduleVo.getModuleName());
				//最后将其加入到集合中
				listNode.add(node);
			}
		}
		
		//新建一个node工具类对象
		NodeRole node = new NodeRole();
		//新建一个集合对象，将上一个集合加入到本集合中
		List<NodeRole> nodeList2 = node.createTree(listNode);
		return nodeList2;
		
	}
	/*
	 * 查询所有模板，树形组件 ，是否选中
	 */
	@RequestMapping("findByAllThree")
	@ResponseBody
	public List<NodeRole> findByAllThree(String id){
		List<ModuleVo> list = moduleServiceInter.findAll();
		List<NodeRole> listNode = new ArrayList<NodeRole>();
		for (Iterator iterator = list.iterator(); iterator.hasNext();) {
			ModuleVo moduleVo = (ModuleVo) iterator.next();
			if(moduleVo.getModuleValidity().equals("有效")) {
				//新建一个node工具类对象
				NodeRole node = new NodeRole();
				//给工具类的id赋值
				node.setId(moduleVo.getModuleId());
				//给工具类的外键赋值
				node.setPid(moduleVo.getModModuleId());
				//给工具类的名称赋值
				node.setTitle(moduleVo.getModuleName());
				List<RoleModuleVo> lists = roleModuleService.findRoleId(id);
				for (int i = 0; i < lists.size(); i++) {
					if(!lists.get(i).getModModuleId().equals("0")) {
						if(lists.get(i).getModuleId().equals(moduleVo.getModuleId())) {
							node.setChecked(true);
							break ;
						}else {
							node.setChecked(false);
						}
					}
				}
				
				//最后将其加入到集合中
				listNode.add(node);
			}
		}
		
		//新建一个node工具类对象
		NodeRole node = new NodeRole();
		//新建一个集合对象，将上一个集合加入到本集合中
		List<NodeRole> nodeList2 = node.createTree(listNode);
		return nodeList2;
		
	}
	
	
}
